﻿using System;
using System.Windows.Forms;
using Company.BLL;
using Company.BLL.KDT.SXXK;
using Company.BLL.DuLieuChuan;
using Company.Interface.KDT.SXXK;
using Janus.Windows.GridEX;
using Janus.Windows.UI.CommandBars;
using InheritableBoolean=Janus.Windows.UI.InheritableBoolean;
using Company.BLL.KDT;

namespace Company.Interface.KDT.SXXK
{
    public partial class DinhMucManageForm : BaseForm
    {
        /// <summary>
        /// Dùng cho kết quả tìm kiếm.
        /// </summary>
        private DinhMucDangKyCollection dmDangKyCollection = new DinhMucDangKyCollection();
        
        /// <summary>
        /// Thông tin sản phẩm đang dược chọn.
        /// </summary>
        private readonly DinhMucDangKy currentDMDangKy = new DinhMucDangKy();


        public DinhMucManageForm()
        {
            this.InitializeComponent();
        }
        private int CheckNPLVaSPDuyet(DinhMucCollection collection,string mahaiquan)
        {
            foreach (DinhMuc dm in collection)
            {
                BLL.SXXK.NguyenPhuLieu npl = new Company.BLL.SXXK.NguyenPhuLieu();
                npl.Ma = dm.MaNguyenPhuLieu;
                npl.MaDoanhNghiep = GlobalSettings.MA_DON_VI;
                npl.MaHaiQuan = mahaiquan;
                if (!npl.Load())
                    return 0;
                BLL.SXXK.SanPham sp = new Company.BLL.SXXK.SanPham();
                sp.Ma = dm.MaSanPham;
                sp.MaDoanhNghiep = GlobalSettings.MA_DON_VI;
                sp.MaHaiQuan = mahaiquan;
                if (!sp.Load())
                    return 1;
            }
            return 2;
        }

        /// <summary>
        /// Gửi thông tin đăng ký đến Hải quan.
        /// </summary>
        private void send()
        {
            DinhMucDangKy dmDangKy = new DinhMucDangKy();
            try
            {
                this.Cursor = Cursors.WaitCursor;              
                if (dgList.GetRow() != null)
                {
                    dmDangKy = (DinhMucDangKy)dgList.GetRow().DataRow;
                    dmDangKy.LoadDMCollection();
                    if (dmDangKy.DMCollection.Count == 0)
                    {
                        this.Cursor = Cursors.Default;
                        ShowMessage("Danh sách sản phẩm rỗng.\nKhông thể thực hiện khai báo thông tin đến Hải quan.", false);                       
                        return;
                    }
                    int s = CheckNPLVaSPDuyet(dmDangKy.DMCollection,dmDangKy.MaHaiQuan);
                    if (s != 2)
                    {
                        string msg = "";
                        if (s == 1)
                            msg = "Trong danh sách này có nguyên phụ liệu chưa được hải quan duyệt.";
                        else msg = "Trong danh sách này có sản phẩm chưa được hải quan duyệt. ";
                        msg += "\n Bạn có muốn gửi lên hay không ?";
                        string kq = ShowMessage(msg, true);
                        if (kq != "Yes")
                            return;
                    }
                    WSForm wsForm = new WSForm();
                    wsForm.ShowDialog(this);
                    if (!wsForm.IsReady) return;
                    this.Cursor = Cursors.WaitCursor;
                    dmDangKy.WSSend();
                    this.Cursor = Cursors.Default;
                    // Thực hiện kiểm tra.
                    if (dmDangKy.SoTiepNhan == 0)
                    {
                        //this.updateRowsOnGrid(danhsachDaDangKy);
                        ShowMessage("Đăng ký không thành công!\nDo có các sản phẩm đã được đăng ký rồi.\nVui lòng kiểm tra lại các dòng màu đỏ!", false);
                    }
                    else
                    {
                        ShowMessage("Đăng ký thành công!\nSố tiếp nhận đăng ký điện tử: " + dmDangKy.SoTiepNhan, false);
                        //cmdAdd.Enabled = cmdSend.Enabled = InheritableBoolean.False;
                        this.search();
                    }
                }
            }
            catch (Exception ex)
            {
                this.Cursor = Cursors.Default;
                if (ex.Message.IndexOf("123DaDuyet321") >= 0)
                {
                    ShowMessage("Danh sách này đã duyệt rồi ", false);
                    return;
                }
                if (ShowMessage("Đăng ký không thành công.\nLỗi: " + ex.Message + ".\nBạn có muốn đưa vào hàng đợi không?", true) == "Yes")
                {
                    HangDoi hd = new HangDoi();
                    hd.ID = dmDangKy.ID;
                    hd.LoaiToKhai = LoaiToKhai.DINH_MUC;
                    hd.TrangThai = dmDangKy.TrangThaiXuLy;
                    hd.ChucNang = ChucNang.KHAI_BAO;
                    MainForm.AddToQueueForm(hd);
                    MainForm.ShowQueueForm();
                }
            }
            finally
            {
                this.Cursor = Cursors.Default;
            }
        }


        //-----------------------------------------------------------------------------------------
        private void DinhMucManageForm_Load(object sender, EventArgs e)
        {
            try
            {                
                this.Cursor = Cursors.WaitCursor;                
                this.khoitao_DuLieuChuan();
                
                this.cbStatus.SelectedIndex = 0;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                this.Cursor = Cursors.Default;
            }
        }

        //-----------------------------------------------------------------------------------------
        /// <summary>
        /// Khởi tạo dữ liệu chuẩn.
        /// </summary>
        private void khoitao_DuLieuChuan()
        {
            // Đơn vị tính.
            this._DonViTinh = DonViTinh.SelectAll();
            // Đơn vị Hải quan.
            this._DonViHaiQuan = DonViHaiQuan.SelectAll();

            this.ctrDonViHaiQuan.Ma = "C34C";
        }

        //-----------------------------------------------------------------------------------------

        

        //-----------------------------------------------------------------------------------------

        private void btnSearch_Click(object sender, EventArgs e)
        {            
            this.search();
        }

        //-----------------------------------------------------------------------------------------
        /// <summary>
        /// Tìm kiếm dữ liệu.
        /// </summary>
        private void search()
        {
            // Xây dựng điều kiện tìm kiếm.
            this.Cursor = Cursors.WaitCursor;
            string where = "1 = 1";
            where += string.Format(" AND MaHaiQuan = '{0}'", this.ctrDonViHaiQuan.Ma);

            if (this.txtSoTiepNhan.TextLength > 0)
            {
                where += " AND SoTiepNhan = " + this.txtSoTiepNhan.Value;
            }

            if (Convert.ToInt32(this.cbStatus.SelectedValue) != TrangThaiXuLy.CHUA_KHAI_BAO)
            {
                if (this.txtNamTiepNhan.TextLength > 0)
                {
                    where += " AND YEAR(NgayTiepNhan) = " + this.txtNamTiepNhan.Value;
                }
            }

            where += " AND TrangThaiXuLy = " + this.cbStatus.SelectedValue;
            
            // Thực hiện tìm kiếm.
            this.dmDangKyCollection = DinhMucDangKy.SelectCollectionDynamic(where, "");
            this.dgList.DataSource = this.dmDangKyCollection;
     
            
            // Định dạng kết quả.
            this.setCommandStatus();

            this.currentDMDangKy.TrangThaiXuLy = Convert.ToInt32(this.cbStatus.SelectedValue);
            this.Cursor = Cursors.Default;
        }

        private void setCommandStatus()
        {
            dgList.AllowDelete = Janus.Windows.GridEX.InheritableBoolean.True;
            if (Convert.ToInt32(this.cbStatus.SelectedValue) == TrangThaiXuLy.CHO_DUYET)
            {
                this.dgList.RootTable.Columns["SoTiepNhan"].Visible = true;
                this.dgList.RootTable.Columns["NgayTiepNhan"].Visible = true;
                this.cmdSend.Enabled = InheritableBoolean.False;
                this.cmdSingleDownload.Enabled = InheritableBoolean.True;
                this.cmdCancel.Enabled = InheritableBoolean.True;
            }
            else if (Convert.ToInt32(this.cbStatus.SelectedValue) == TrangThaiXuLy.DA_DUYET)
            {
                this.dgList.RootTable.Columns["SoTiepNhan"].Visible = true;
                this.dgList.RootTable.Columns["NgayTiepNhan"].Visible = true;
                this.cmdSend.Enabled = InheritableBoolean.False;
                this.cmdSingleDownload.Enabled = InheritableBoolean.False;
                this.cmdCancel.Enabled = InheritableBoolean.False;
                dgList.AllowDelete = Janus.Windows.GridEX.InheritableBoolean.False;
            }
            else if (Convert.ToInt32(this.cbStatus.SelectedValue) == TrangThaiXuLy.CHUA_KHAI_BAO)
            {
                this.dgList.RootTable.Columns["SoTiepNhan"].Visible = false;
                this.dgList.RootTable.Columns["NgayTiepNhan"].Visible = false;
                this.cmdSend.Enabled = InheritableBoolean.True;
                this.cmdSingleDownload.Enabled = InheritableBoolean.False;
                this.cmdCancel.Enabled = InheritableBoolean.False;
            }
            else if (Convert.ToInt32(this.cbStatus.SelectedValue) == TrangThaiXuLy.KHONG_PHE_DUYET)
            {
                this.dgList.RootTable.Columns["SoTiepNhan"].Visible = true;
                this.dgList.RootTable.Columns["NgayTiepNhan"].Visible = true;
                this.cmdSend.Enabled = InheritableBoolean.True;
                this.cmdSingleDownload.Enabled = InheritableBoolean.False;
                this.cmdCancel.Enabled = InheritableBoolean.True;
            }
            else if (Convert.ToInt32(this.cbStatus.SelectedValue) == TrangThaiXuLy.CHO_DUYET_DASUACHUA)
            {
                this.dgList.RootTable.Columns["SoTiepNhan"].Visible = true;
                this.dgList.RootTable.Columns["NgayTiepNhan"].Visible = true;
                this.cmdSend.Enabled = InheritableBoolean.True;
                this.cmdSingleDownload.Enabled = InheritableBoolean.True;
                this.cmdCancel.Enabled = InheritableBoolean.True;
            }
        }

        //-----------------------------------------------------------------------------------------

        private void dgList_LoadingRow(object sender, RowLoadEventArgs e)
        {
            if (e.Row.RowType == RowType.Record)
            {
                e.Row.Cells["TenHaiQuan"].Text = this.DonViHaiQuan_GetName(e.Row.Cells["MaHaiQuan"].Value.ToString());
                switch (Convert.ToInt32(e.Row.Cells["TrangThaiXuLy"].Value))
                {

                    case -2:
                        e.Row.Cells["TrangThaiXuLy"].Text = "Chờ duyệt có sửa chữa";
                        break;
                    case -1:
                        e.Row.Cells["TrangThaiXuLy"].Text = "Chưa khai báo";
                        break;
                    case 0:
                        e.Row.Cells["TrangThaiXuLy"].Text = "Chờ duyệt";
                        break;
                    case 1:
                        e.Row.Cells["TrangThaiXuLy"].Text = "Đã duyệt";
                        break;
                    case 2:
                        e.Row.Cells["TrangThaiXuLy"].Text = "Không phê duyệt";
                        break;

                }
            }
        }


        /// <summary>
        /// Hủy thông tin đã đăng ký.
        /// </summary>
        private void cancel()
        {
            DinhMucDangKy dmDangKy = new DinhMucDangKy();
            try
            {
                
                if (dgList.GetRow() != null)
                {
                    dmDangKy = (DinhMucDangKy)dgList.GetRow().DataRow;
                    if (dmDangKy.TrangThaiXuLy == TrangThaiXuLy.CHO_DUYET || dmDangKy.TrangThaiXuLy == TrangThaiXuLy.KHONG_PHE_DUYET)
                    {
                        WSForm wsForm = new WSForm();
                        wsForm.ShowDialog(this);
                        if (!wsForm.IsReady) return;
                        this.Cursor = Cursors.WaitCursor;
                        bool result = dmDangKy.WSCancel();
                        this.Cursor = Cursors.Default;
                        if (result)
                        {
                            ShowMessage("Hủy thông tin đã đăng ký thành công!", false);
                            this.search();
                        }
                        else
                        {
                            ShowMessage("Hủy thông tin đã đăng ký không thành công!", false);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                this.Cursor = Cursors.Default;
                if (ex.Message.IndexOf("123DaDuyet321") >= 0)
                {
                    ShowMessage("Danh sách này đã duyệt rồi ", false);
                    return;
                }
                if (ShowMessage("Hủy thông tin đăng ký không thành công.\nLỗi: " + ex.Message + ".\nBạn có muốn đưa vào hàng đợi không?", true) == "Yes")
                {
                    HangDoi hd = new HangDoi();
                    hd.ID = dmDangKy.ID;
                    hd.LoaiToKhai = LoaiToKhai.DINH_MUC;
                    hd.TrangThai = dmDangKy.TrangThaiXuLy;
                    hd.ChucNang = ChucNang.HUY_KHAI_BAO;
                    MainForm.AddToQueueForm(hd);
                    MainForm.ShowQueueForm();
                }
            }
            finally
            {
                this.Cursor = Cursors.Default;
            }
        }

        //-----------------------------------------------------------------------------------------

        private void download()
        {
            DinhMucDangKy dmDangKy = new DinhMucDangKy();
            try
            {
                this.Cursor = Cursors.WaitCursor;
                GridEXSelectedItemCollection items = this.dgList.SelectedItems;
                foreach (GridEXSelectedItem i in items)
                {
                    if (i.RowType == RowType.Record)
                    {
                        dmDangKy = (DinhMucDangKy)i.GetRow().DataRow;

                        int ttxl = dmDangKy.TrangThaiXuLy;

                        WSForm wsForm = new WSForm();
                        wsForm.ShowDialog(this);
                        if (!wsForm.IsReady) return;
                        this.Cursor = Cursors.WaitCursor;
                        dmDangKy.WSDownload();
                        this.Cursor = Cursors.Default;
                        if (dmDangKy.TrangThaiXuLy==TrangThaiXuLy.DA_DUYET)
                        {
                            this.ShowMessage("Nhận dữ liệu thành công! \nTrạng thái chứng từ đã thay đổi: Đã duyệt chính thức.", false);
                            this.search();
                        }
                        else if (dmDangKy.TrangThaiXuLy == TrangThaiXuLy.CHO_DUYET)
                        {
                            this.ShowMessage("Nhận dữ liệu thành công! Hải quan chưa duyệt danh sách này", false);
                            this.dgList.Refetch();                            
                        }
                        else if (dmDangKy.TrangThaiXuLy == TrangThaiXuLy.KHONG_PHE_DUYET)
                        {
                            this.ShowMessage("Nhận dữ liệu thành công! \nTrạng thái chứng từ đã thay đổi: Hải quan không phê duyệt.", false);
                            this.search();
                        }
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                this.Cursor = Cursors.Default;
                if (ShowMessage("Nhận dữ liệu không thành công.\nLỗi: " + ex.Message + ".\nBạn có muốn đưa vào hàng đợi không?", true) == "Yes")
                {
                    HangDoi hd = new HangDoi();
                    hd.ID = dmDangKy.ID;
                    hd.LoaiToKhai = LoaiToKhai.DINH_MUC;
                    hd.TrangThai = dmDangKy.TrangThaiXuLy;
                    hd.ChucNang = ChucNang.NHAN_THONG_TIN;
                    MainForm.AddToQueueForm(hd);
                    MainForm.ShowQueueForm();
                }
            }
            finally
            {
                this.Cursor = Cursors.Default;
            }
        }

        //-----------------------------------------------------------------------------------------

        private void cmMain_CommandClick(object sender, CommandEventArgs e)
        {
            switch (e.Command.Key)
            {
                case "cmdSingleDownload":
                    this.download();
                    break;
                case "cmdCancel":
                    this.cancel();
                    break;
                case "cmdSend":
                    this.send();
                    break;
            }
        }

        //-----------------------------------------------------------------------------------------

        private void dgList_RowDoubleClick(object sender, RowActionEventArgs e)
        {
            if (e.Row.RowType == RowType.Record)
            {
                DinhMucDangKyDetailForm f = new DinhMucDangKyDetailForm();
                f.DMDangKy = (DinhMucDangKy)e.Row.DataRow;
                if (f.DMDangKy.TrangThaiXuLy != TrangThaiXuLy.DA_DUYET)
                {
                    f.OpenType = OpenFormType.Edit;
                }
                else
                {
                    f.OpenType = OpenFormType.View;
                }
                f.ShowDialog(this);
                this.search();
            }
        }

        //-----------------------------------------------------------------------------------------

        private void cbStatus_SelectedValueChanged(object sender, EventArgs e)
        {
            if (Convert.ToInt32(this.cbStatus.SelectedValue) == TrangThaiXuLy.CHUA_KHAI_BAO)
            {
                this.txtNamTiepNhan.Text = string.Empty;
                this.txtNamTiepNhan.Value = 0;
                this.txtNamTiepNhan.Enabled = false;
                this.txtSoTiepNhan.Text = string.Empty;
                this.txtSoTiepNhan.Value = 0;
                this.txtSoTiepNhan.Enabled = false;
            }
            else
            {
                this.txtNamTiepNhan.Value = DateTime.Today.Year;
                this.txtNamTiepNhan.Enabled = true;
                this.txtSoTiepNhan.Enabled = true;
            }
        }

        private void DinhMucManageForm_Shown(object sender, EventArgs e)
        {
            this.search();
        }

        private void dgList_DeletingRecord(object sender, RowActionCancelEventArgs e)
        {
            try
            {
                this.Cursor = Cursors.WaitCursor;
                if (e.Row.RowType == RowType.Record)
                {
                    DinhMucDangKy dmDangKySelected = (DinhMucDangKy)e.Row.DataRow;
                    if (dmDangKySelected.TrangThaiXuLy != TrangThaiXuLy.DA_DUYET)
                    {
                        if (ShowMessage("Bạn có muốn xóa thông tin đăng ký này và các định mức liên quan không?", true) == "Yes")
                        {
                            dmDangKySelected.Delete();
                        }
                        else
                        {
                            e.Cancel = true;
                        }
                    }
                    else 
                    {
                        ShowMessage("Danh sách đã được duyệt. Không được xóa",false);
                        e.Cancel = true;
                    }                   
                }                
            }
            catch (Exception ex)
            {
                ShowMessage(ex.Message, false);
            }
            finally
            {
                this.Cursor = Cursors.Default;
            }
        }

        private void dgList_DeletingRecords(object sender, System.ComponentModel.CancelEventArgs e)
        {
            try
            {
                this.Cursor = Cursors.WaitCursor;                
                {
                                        
                    {
                        if (ShowMessage("Bạn có muốn xóa thông tin đăng ký này và các định mức liên quan không?", true) == "Yes")
                        {
                            GridEXSelectedItemCollection items = dgList.SelectedItems;
                            foreach (GridEXSelectedItem i in items)
                            {
                                if (i.RowType == RowType.Record)
                                {
                                    DinhMucDangKy dmDangKySelected = (DinhMucDangKy)i.GetRow().DataRow;
                                    if (dmDangKySelected.ID > 0)
                                    {
                                        dmDangKySelected.Delete();
                                    }
                                }
                            }
                        }
                        else
                        {
                            e.Cancel = true;
                        }
                    }
                   
                }
            }
            catch (Exception ex)
            {
                ShowMessage(ex.Message, false);
            }
            finally
            {
                this.Cursor = Cursors.Default;
            }
        }
    }
}